package org.flyan.ffsm.core.arg;

import java.util.HashMap;
import java.util.Map;

/**
 * 事件发生所携带的参数表。通常的，同一个事件发生，可能会导致不同的结果，例如对于查看某个
 * 隐私数据，查看人不同自然会得到不同的结果，除本人以及本人认可的其他人自然是看不到的。
 *
 * @author flyan
 * @version 1.0
 * @date 6/28/22
 */
public final class Args {

    public static final Args EMPTY_ARGS = new Args();

    private final Map<String, Object> args;

    public Args() {
        this.args = new HashMap<>(7);
    }

    public Args(Map<String, Object> args) {
        this.args = args;
    }

    /**
     * 设置一个事件参数
     *
     * @param arg
     * @param argVal
     */
    public void putArg(String arg, Object argVal) {
        this.args.put(arg, argVal);
    }

    /**
     * 获取一个事件参数
     *
     * @param arg
     * @return
     */
    public Object getArg(String arg) {
        return this.args.get(arg);
    }

    public int total() {
        return this.args.size();
    }

    public boolean empty() {
        return this.args.isEmpty();
    }

    @Override
    public String toString() {
        return args.toString();
    }

    public static Args emptyArgs() {
        return EMPTY_ARGS;
    }

}
